package chapter_3;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 演示java中对字符串编码用到的字符集
 * @author fulv
 */
public class StringCharSet {
    private static final String HEX_DIGIT = "0123456789ABCDEF";
    public static void main(String[] args) throws UnsupportedEncodingException {
        //使用不同的字符集对汉字字符串进行编码
        String str = new String("你好中国");
        System.out.println("----------使用平台默认的字符集utf8-------");
        byte[] strBytesByUTF8 = str.getBytes();
        System.out.println(str + ": 对应的hex数组为:" + byteArrayToHex(strBytesByUTF8));

        System.out.println("----------使用字符集gbk-------");
        byte[] strBytesByGB2312 = str.getBytes("gbk");
        System.out.println(str + ": 对应的hex数组为:" + byteArrayToHex(strBytesByGB2312));
    }

    /**
     *
     * 将一个字节数组中的每个字节转换为16进制然后组合成字符串返回
     * @param bytes 传入的字节数组
     * @return
     */
    private static String byteArrayToHex(byte[] bytes){
        StringBuilder result = new StringBuilder("");
        byte mask = 0x0F;
        for(byte b:bytes){
            char[] hex = new char[2];
            for(int i=0;i<hex.length;i++){
                hex[hex.length-i-1] = HEX_DIGIT.charAt((int)(b>>(4*i))&mask);
            }
            result.append(" ");
            result.append(hex);
        }

        return result.toString();
    }
}
